home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / javax / swing / DefaultDesktopManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  8.2 KB  |  551 lines

  1. package javax.swing;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Point;
  9. import java.awt.Rectangle;
  10. import java.beans.PropertyVetoException;
  11. import java.io.Serializable;
  12.  
  13. public class DefaultDesktopManager implements DesktopManager, Serializable {
  14.    static final String HAS_BEEN_ICONIFIED_PROPERTY = "wasIconOnce";
  15.    static final int DEFAULT_DRAG_MODE = 0;
  16.    static final int OUTLINE_DRAG_MODE = 1;
  17.    static final int FASTER_DRAG_MODE = 2;
  18.    int dragMode = 0;
  19.    private transient Rectangle currentBounds = null;
  20.    private transient Graphics desktopGraphics = null;
  21.    private transient Rectangle desktopBounds = null;
  22.    private transient Rectangle[] floatingItems = new Rectangle[0];
  23.    private transient boolean didDrag;
  24.    private transient Point currentLoc = null;
  25.  
  26.    public void openFrame(JInternalFrame var1) {
  27.       if (var1.getDesktopIcon().getParent() != null) {
  28.          var1.getDesktopIcon().getParent().add(var1);
  29.          this.removeIconFor(var1);
  30.       }
  31.  
  32.    }
  33.  
  34.    public void closeFrame(JInternalFrame var1) {
  35.       JDesktopPane var2 = var1.getDesktopPane();
  36.       if (var2 != null) {
  37.          boolean var3 = var1.isSelected();
  38.          Container var4 = var1.getParent();
  39.          JInternalFrame var5 = null;
  40.          if (var3) {
  41.             var5 = var2.getNextFrame(var1);
  42.  
  43.             try {
  44.                var1.setSelected(false);
  45.             } catch (PropertyVetoException var8) {
  46.             }
  47.          }
  48.  
  49.          if (var4 != null) {
  50.             var4.remove(var1);
  51.             var4.repaint(var1.getX(), var1.getY(), var1.getWidth(), var1.getHeight());
  52.          }
  53.  
  54.          this.removeIconFor(var1);
  55.          if (var1.getNormalBounds() != null) {
  56.             var1.setNormalBounds((Rectangle)null);
  57.          }
  58.  
  59.          if (this.wasIcon(var1)) {
  60.             this.setWasIcon(var1, (Boolean)null);
  61.          }
  62.  
  63.          if (var5 != null) {
  64.             try {
  65.                var5.setSelected(true);
  66.             } catch (PropertyVetoException var7) {
  67.             }
  68.          } else if (var3 && var2.getComponentCount() == 0) {
  69.             var2.requestFocus();
  70.          }
  71.  
  72.       }
  73.    }
  74.  
  75.    public void maximizeFrame(JInternalFrame var1) {
  76.       if (var1.isIcon()) {
  77.          try {
  78.             var1.setIcon(false);
  79.          } catch (PropertyVetoException var4) {
  80.          }
  81.       } else {
  82.          var1.setNormalBounds(var1.getBounds());
  83.          Rectangle var2 = var1.getParent().getBounds();
  84.          this.setBoundsForFrame(var1, 0, 0, var2.width, var2.height);
  85.       }
  86.  
  87.       try {
  88.          var1.setSelected(true);
  89.       } catch (PropertyVetoException var3) {
  90.       }
  91.  
  92.    }
  93.  
  94.    public void minimizeFrame(JInternalFrame var1) {
  95.       if (var1.isIcon()) {
  96.          this.iconifyFrame(var1);
  97.       } else {
  98.          if (var1.getNormalBounds() != null) {
  99.             Rectangle var2 = var1.getNormalBounds();
  100.             var1.setNormalBounds((Rectangle)null);
  101.  
  102.             try {
  103.                var1.setSelected(true);
  104.             } catch (PropertyVetoException var4) {
  105.             }
  106.  
  107.             this.setBoundsForFrame(var1, var2.x, var2.y, var2.width, var2.height);
  108.          }
  109.  
  110.       }
  111.    }
  112.  
  113.    public void iconifyFrame(JInternalFrame var1) {
  114.       Container var3 = var1.getParent();
  115.       JDesktopPane var4 = var1.getDesktopPane();
  116.       boolean var5 = var1.isSelected();
  117.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  118.       if (!this.wasIcon(var1)) {
  119.          Rectangle var6 = this.getBoundsForIconOf(var1);
  120.          var2.setBounds(var6.x, var6.y, var6.width, var6.height);
  121.          this.setWasIcon(var1, Boolean.TRUE);
  122.       }
  123.  
  124.       if (var3 != null && var4 != null) {
  125.          if (var3 instanceof JLayeredPane) {
  126.             JLayeredPane var8 = (JLayeredPane)var3;
  127.             int var7 = JLayeredPane.getLayer(var1);
  128.             JLayeredPane.putLayer(var2, var7);
  129.          }
  130.  
  131.          if (!var1.isMaximum()) {
  132.             var1.setNormalBounds(var1.getBounds());
  133.          }
  134.  
  135.          var4.setComponentOrderCheckingEnabled(false);
  136.          var3.remove(var1);
  137.          var3.add(var2);
  138.          var4.setComponentOrderCheckingEnabled(true);
  139.          var3.repaint(var1.getX(), var1.getY(), var1.getWidth(), var1.getHeight());
  140.          if (var5 && var4.selectFrame(true) == null) {
  141.             var1.restoreSubcomponentFocus();
  142.          }
  143.  
  144.       }
  145.    }
  146.  
  147.    public void deiconifyFrame(JInternalFrame var1) {
  148.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  149.       Container var3 = var2.getParent();
  150.       JDesktopPane var4 = var1.getDesktopPane();
  151.       if (var3 != null && var4 != null) {
  152.          var4.setComponentOrderCheckingEnabled(false);
  153.          var3.add(var1);
  154.          if (var1.isMaximum()) {
  155.             Rectangle var5 = var3.getBounds();
  156.             if (var1.getWidth() != var5.width || var1.getHeight() != var5.height) {
  157.                this.setBoundsForFrame(var1, 0, 0, var5.width, var5.height);
  158.             }
  159.          }
  160.  
  161.          this.removeIconFor(var1);
  162.          if (var1.isSelected()) {
  163.             var1.moveToFront();
  164.             var1.restoreSubcomponentFocus();
  165.          } else {
  166.             try {
  167.                var1.setSelected(true);
  168.             } catch (PropertyVetoException var6) {
  169.             }
  170.          }
  171.  
  172.          var4.setComponentOrderCheckingEnabled(true);
  173.       }
  174.  
  175.    }
  176.  
  177.    public void activateFrame(JInternalFrame var1) {
  178.       Container var2 = var1.getParent();
  179.       JDesktopPane var4 = var1.getDesktopPane();
  180.       JInternalFrame var5 = var4 == null ? null : var4.getSelectedFrame();
  181.       if (var2 == null) {
  182.          var2 = var1.getDesktopIcon().getParent();
  183.          if (var2 == null) {
  184.             return;
  185.          }
  186.       }
  187.  
  188.       if (var5 == null) {
  189.          if (var4 != null) {
  190.             var4.setSelectedFrame(var1);
  191.          }
  192.       } else if (var5 != var1) {
  193.          if (var5.isSelected()) {
  194.             try {
  195.                var5.setSelected(false);
  196.             } catch (PropertyVetoException var7) {
  197.             }
  198.          }
  199.  
  200.          if (var4 != null) {
  201.             var4.setSelectedFrame(var1);
  202.          }
  203.       }
  204.  
  205.       var1.moveToFront();
  206.    }
  207.  
  208.    public void deactivateFrame(JInternalFrame var1) {
  209.       JDesktopPane var2 = var1.getDesktopPane();
  210.       JInternalFrame var3 = var2 == null ? null : var2.getSelectedFrame();
  211.       if (var3 == var1) {
  212.          var2.setSelectedFrame((JInternalFrame)null);
  213.       }
  214.  
  215.    }
  216.  
  217.    public void beginDraggingFrame(JComponent var1) {
  218.       this.setupDragMode(var1);
  219.       if (this.dragMode == 2) {
  220.          Container var2 = var1.getParent();
  221.          this.floatingItems = this.findFloatingItems(var1);
  222.          this.currentBounds = var1.getBounds();
  223.          if (var2 instanceof JComponent) {
  224.             this.desktopBounds = ((JComponent)var2).getVisibleRect();
  225.          } else {
  226.             this.desktopBounds = ((Component)var2).getBounds();
  227.             this.desktopBounds.x = this.desktopBounds.y = 0;
  228.          }
  229.  
  230.          this.desktopGraphics = JComponent.safelyGetGraphics(var2);
  231.          ((JInternalFrame)var1).isDragging = true;
  232.          this.didDrag = false;
  233.       }
  234.  
  235.    }
  236.  
  237.    private void setupDragMode(JComponent var1) {
  238.       JDesktopPane var2 = this.getDesktopPane(var1);
  239.       Container var3 = var1.getParent();
  240.       this.dragMode = 0;
  241.       if (var2 != null) {
  242.          String var4 = (String)var2.getClientProperty("JDesktopPane.dragMode");
  243.          if (var4 != null && var4.equals("outline")) {
  244.             this.dragMode = 1;
  245.          } else if (var4 == null || !var4.equals("faster") || !(var1 instanceof JInternalFrame) || !((JInternalFrame)var1).isOpaque() || var3 != null && !var3.isOpaque()) {
  246.             if (var2.getDragMode() == 1) {
  247.                this.dragMode = 1;
  248.             } else if (var2.getDragMode() == 0 && var1 instanceof JInternalFrame && ((JInternalFrame)var1).isOpaque()) {
  249.                this.dragMode = 2;
  250.             } else {
  251.                this.dragMode = 0;
  252.             }
  253.          } else {
  254.             this.dragMode = 2;
  255.          }
  256.       }
  257.  
  258.    }
  259.  
  260.    public void dragFrame(JComponent var1, int var2, int var3) {
  261.       if (this.dragMode == 1) {
  262.          JDesktopPane var4 = this.getDesktopPane(var1);
  263.          if (var4 != null) {
  264.             Graphics var5 = JComponent.safelyGetGraphics(var4);
  265.             var5.setXORMode(Color.white);
  266.             if (this.currentLoc != null) {
  267.                var5.drawRect(this.currentLoc.x, this.currentLoc.y, var1.getWidth() - 1, var1.getHeight() - 1);
  268.             }
  269.  
  270.             var5.drawRect(var2, var3, var1.getWidth() - 1, var1.getHeight() - 1);
  271.             this.currentLoc = new Point(var2, var3);
  272.             var5.dispose();
  273.          }
  274.       } else if (this.dragMode == 2) {
  275.          this.dragFrameFaster(var1, var2, var3);
  276.       } else {
  277.          this.setBoundsForFrame(var1, var2, var3, var1.getWidth(), var1.getHeight());
  278.       }
  279.  
  280.    }
  281.  
  282.    public void endDraggingFrame(JComponent var1) {
  283.       if (this.dragMode == 1 && this.currentLoc != null) {
  284.          this.setBoundsForFrame(var1, this.currentLoc.x, this.currentLoc.y, var1.getWidth(), var1.getHeight());
  285.          this.currentLoc = null;
  286.       } else if (this.dragMode == 2) {
  287.          this.currentBounds = null;
  288.          if (this.desktopGraphics != null) {
  289.             this.desktopGraphics.dispose();
  290.             this.desktopGraphics = null;
  291.          }
  292.  
  293.          this.desktopBounds = null;
  294.          ((JInternalFrame)var1).isDragging = false;
  295.       }
  296.  
  297.    }
  298.  
  299.    public void beginResizingFrame(JComponent var1, int var2) {
  300.       this.setupDragMode(var1);
  301.    }
  302.  
  303.    public void resizeFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  304.       if (this.dragMode != 0 && this.dragMode != 2) {
  305.          JDesktopPane var6 = this.getDesktopPane(var1);
  306.          if (var6 != null) {
  307.             Graphics var7 = JComponent.safelyGetGraphics(var6);
  308.             var7.setXORMode(Color.white);
  309.             if (this.currentBounds != null) {
  310.                var7.drawRect(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width - 1, this.currentBounds.height - 1);
  311.             }
  312.  
  313.             var7.drawRect(var2, var3, var4 - 1, var5 - 1);
  314.             this.currentBounds = new Rectangle(var2, var3, var4, var5);
  315.             var7.setPaintMode();
  316.             var7.dispose();
  317.          }
  318.       } else {
  319.          this.setBoundsForFrame(var1, var2, var3, var4, var5);
  320.       }
  321.  
  322.    }
  323.  
  324.    public void endResizingFrame(JComponent var1) {
  325.       if (this.dragMode == 1 && this.currentBounds != null) {
  326.          this.setBoundsForFrame(var1, this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  327.          this.currentBounds = null;
  328.       }
  329.  
  330.    }
  331.  
  332.    public void setBoundsForFrame(JComponent var1, int var2, int var3, int var4, int var5) {
  333.       boolean var6 = var1.getWidth() != var4 || var1.getHeight() != var5;
  334.       var1.setBounds(var2, var3, var4, var5);
  335.       if (var6) {
  336.          var1.validate();
  337.       }
  338.  
  339.    }
  340.  
  341.    protected void removeIconFor(JInternalFrame var1) {
  342.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  343.       Container var3 = var2.getParent();
  344.       if (var3 != null) {
  345.          var3.remove(var2);
  346.          var3.repaint(var2.getX(), var2.getY(), var2.getWidth(), var2.getHeight());
  347.       }
  348.  
  349.    }
  350.  
  351.    protected Rectangle getBoundsForIconOf(JInternalFrame var1) {
  352.       JInternalFrame.JDesktopIcon var2 = var1.getDesktopIcon();
  353.       Dimension var3 = var2.getPreferredSize();
  354.       Container var4 = var1.getParent();
  355.       if (var4 == null) {
  356.          var4 = var1.getDesktopIcon().getParent();
  357.       }
  358.  
  359.       if (var4 == null) {
  360.          return new Rectangle(0, 0, var3.width, var3.height);
  361.       } else {
  362.          Rectangle var5 = var4.getBounds();
  363.          Component[] var6 = var4.getComponents();
  364.          Rectangle var7 = null;
  365.          JInternalFrame.JDesktopIcon var8 = null;
  366.          int var9 = 0;
  367.          int var10 = var5.height - var3.height;
  368.          int var11 = var3.width;
  369.          int var12 = var3.height;
  370.          boolean var13 = false;
  371.  
  372.          while(!var13) {
  373.             var7 = new Rectangle(var9, var10, var11, var12);
  374.             var13 = true;
  375.  
  376.             for(int var14 = 0; var14 < var6.length; ++var14) {
  377.                if (var6[var14] instanceof JInternalFrame) {
  378.                   var8 = ((JInternalFrame)var6[var14]).getDesktopIcon();
  379.                } else {
  380.                   if (!(var6[var14] instanceof JInternalFrame.JDesktopIcon)) {
  381.                      continue;
  382.                   }
  383.  
  384.                   var8 = (JInternalFrame.JDesktopIcon)var6[var14];
  385.                }
  386.  
  387.                if (!var8.equals(var2) && var7.intersects(var8.getBounds())) {
  388.                   var13 = false;
  389.                   break;
  390.                }
  391.             }
  392.  
  393.             if (var8 == null) {
  394.                return var7;
  395.             }
  396.  
  397.             var9 += var8.getBounds().width;
  398.             if (var9 + var11 > var5.width) {
  399.                var9 = 0;
  400.                var10 -= var12;
  401.             }
  402.          }
  403.  
  404.          return var7;
  405.       }
  406.    }
  407.  
  408.    protected void setPreviousBounds(JInternalFrame var1, Rectangle var2) {
  409.       var1.setNormalBounds(var2);
  410.    }
  411.  
  412.    protected Rectangle getPreviousBounds(JInternalFrame var1) {
  413.       return var1.getNormalBounds();
  414.    }
  415.  
  416.    protected void setWasIcon(JInternalFrame var1, Boolean var2) {
  417.       if (var2 != null) {
  418.          var1.putClientProperty("wasIconOnce", var2);
  419.       }
  420.  
  421.    }
  422.  
  423.    protected boolean wasIcon(JInternalFrame var1) {
  424.       return var1.getClientProperty("wasIconOnce") == Boolean.TRUE;
  425.    }
  426.  
  427.    JDesktopPane getDesktopPane(JComponent var1) {
  428.       JDesktopPane var2 = null;
  429.       Container var3 = var1.getParent();
  430.  
  431.       while(var2 == null) {
  432.          if (var3 instanceof JDesktopPane) {
  433.             var2 = (JDesktopPane)var3;
  434.          } else {
  435.             if (var3 == null) {
  436.                break;
  437.             }
  438.  
  439.             var3 = ((Component)var3).getParent();
  440.          }
  441.       }
  442.  
  443.       return var2;
  444.    }
  445.  
  446.    private void dragFrameFaster(JComponent var1, int var2, int var3) {
  447.       Rectangle var4 = new Rectangle(this.currentBounds.x, this.currentBounds.y, this.currentBounds.width, this.currentBounds.height);
  448.       this.currentBounds.x = var2;
  449.       this.currentBounds.y = var3;
  450.       if (this.didDrag) {
  451.          this.emergencyCleanup(var1);
  452.       } else {
  453.          this.didDrag = true;
  454.          ((JInternalFrame)var1).danger = false;
  455.       }
  456.  
  457.       boolean var5 = this.isFloaterCollision(var4, this.currentBounds);
  458.       JComponent var6 = (JComponent)var1.getParent();
  459.       Rectangle var7 = var4.intersection(this.desktopBounds);
  460.       RepaintManager var8 = RepaintManager.currentManager(var1);
  461.       var8.beginPaint();
  462.  
  463.       try {
  464.          if (!var5) {
  465.             var8.copyArea(var6, this.desktopGraphics, var7.x, var7.y, var7.width, var7.height, var2 - var4.x, var3 - var4.y, true);
  466.          }
  467.  
  468.          var1.setBounds(this.currentBounds);
  469.          if (var5) {
  470.             ((JInternalFrame)var1).isDragging = false;
  471.             var6.paintImmediately(this.currentBounds);
  472.             ((JInternalFrame)var1).isDragging = true;
  473.          }
  474.  
  475.          var8.markCompletelyClean(var6);
  476.          var8.markCompletelyClean(var1);
  477.          Object var9 = null;
  478.          Rectangle[] var14;
  479.          if (var4.intersects(this.currentBounds)) {
  480.             var14 = SwingUtilities.computeDifference(var4, this.currentBounds);
  481.          } else {
  482.             var14 = new Rectangle[]{var4};
  483.          }
  484.  
  485.          for(int var10 = 0; var10 < var14.length; ++var10) {
  486.             var6.paintImmediately(var14[var10]);
  487.          }
  488.  
  489.          if (!var7.equals(var4)) {
  490.             var14 = SwingUtilities.computeDifference(var4, this.desktopBounds);
  491.  
  492.             for(int var16 = 0; var16 < var14.length; ++var16) {
  493.                var14[var16].x += var2 - var4.x;
  494.                var14[var16].y += var3 - var4.y;
  495.                ((JInternalFrame)var1).isDragging = false;
  496.                var6.paintImmediately(var14[var16]);
  497.                ((JInternalFrame)var1).isDragging = true;
  498.             }
  499.          }
  500.       } finally {
  501.          var8.endPaint();
  502.       }
  503.  
  504.    }
  505.  
  506.    private boolean isFloaterCollision(Rectangle var1, Rectangle var2) {
  507.       if (this.floatingItems.length == 0) {
  508.          return false;
  509.       } else {
  510.          for(int var3 = 0; var3 < this.floatingItems.length; ++var3) {
  511.             boolean var4 = var1.intersects(this.floatingItems[var3]);
  512.             if (var4) {
  513.                return true;
  514.             }
  515.  
  516.             boolean var5 = var2.intersects(this.floatingItems[var3]);
  517.             if (var5) {
  518.                return true;
  519.             }
  520.          }
  521.  
  522.          return false;
  523.       }
  524.    }
  525.  
  526.    private Rectangle[] findFloatingItems(JComponent var1) {
  527.       Container var2 = var1.getParent();
  528.       Component[] var3 = var2.getComponents();
  529.       int var4 = 0;
  530.  
  531.       for(var4 = 0; var4 < var3.length && var3[var4] != var1; ++var4) {
  532.       }
  533.  
  534.       Rectangle[] var5 = new Rectangle[var4];
  535.  
  536.       for(int var7 = 0; var7 < var5.length; ++var7) {
  537.          var5[var7] = var3[var7].getBounds();
  538.       }
  539.  
  540.       return var5;
  541.    }
  542.  
  543.    private void emergencyCleanup(JComponent var1) {
  544.       if (((JInternalFrame)var1).danger) {
  545.          SwingUtilities.invokeLater(new 1(this, var1));
  546.          ((JInternalFrame)var1).danger = false;
  547.       }
  548.  
  549.    }
  550. }
  551.